iT邦幫忙

DAY 5
1

發開相關系列 第 5

NuGet系列-製作安裝Package時自動設定Config

  • 分享至 

  • xImage
  •  

在NuGet還沒有出來前要在專案中加入組件的相關Config是挺麻煩的,要看著文件或範例來一段一段複制貼上Config,說真的不是很方便,但是NuGet有提供Config轉換,會把需要設定的Config合併到專案的Config中,可以省下不少設定時間,這篇就來跟大家說在建立Package時如何加入Config轉換檔。
同步更新於:http://www.dotblogs.com.tw/wadehuang36/archive/2011/10/16/nuget-config-transform.aspx

在NuGet還沒有出來前要在專案中加入組件的相關Config是挺麻煩的,要看著文件或範例來一段一段複制貼上Config,說真的不是很方便,但是NuGet有提供Config轉換,會把需要設定的Config合併到專案的Config中,可以省下不少設定時間,這篇就來跟大家說在建立Package時如何加入Config轉換檔。

建立Config轉換檔
準備一個僅安裝時需要的Config檔,如下範列是我在製作Common.Logging.Elmah時所有的設定。

<configuration>
  <configSections>    
    <sectionGroup name="common">
      <section name="logging"t ype="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
    </sectionGroup>
  </configSections>    
  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Elmah.ElmahLoggerFactoryAdapter, Common.Logging.Elmah">
        <arg key="Level" value="all"/>
      </factoryAdapter>
    </logging>
  </common>  
</configuration>

NuGet的Config檔的轉化檔在設計上很簡單,就跟平常在設定Config一樣一樣,相對的它沒有辦法做太多事,只能以Xml的標籤,一個一個比對element的階層與內容,沒有完全相同的element就新增,如果element相同,但有一個attribute相同會合併設定,完全相同就略過,以下面的例子為例:

App.Config內容

<configuration>
  <appSettings>
    <add key="SetA" />
    <add key="SetB" value="App.Coinfg" />
    <add key="SetC" value="Same" />    
  </appSettings>
</configuration>

App.config.transform(transform為轉換檔的副檔名)內容

<configuration>
  <appSettings>
    <add key="SetA" vaule="Transformation" />
    <add key="SetB" value="Transformation" />
    <add key="SetC" value="Same" />
    <add key="SetD" value="Transformation" />
  </appSettings>
</configuration>

合併後的結果

<configuration>                               //完全一樣,不處理
  <appsettings>                               //完全一樣,不處理
    <add key="SetA" value="Transformation" /> //一個Attribute相同,合併
    <add key="SetB" value="App.Coinfg"/>     //雖然有一個Attribute相同,但另一個Attribute不同,不處理
    <add key="SetB" value="Transformation" /> //雖然有一個Attribute相同,但另一個Attribute不同,新增
    <add key="SetC" value="Same" />           //完全一樣,不處理
    <add key="SetD" value="Transformation" /> //沒有,新增
  </appsettings>                              
</configuration>                              

如果要寫某種情境下才新增設定,那就不能用Config轉化檔,可能要在NuGet的PowerShell安裝檔中寫Code來處理。

加入Package中
轉換檔的副檔名是.transform,只要將準備好的config的檔名後方加上.transform及可,如果是要轉換web.config,就建立web.config.transform,如果是要轉換app.config,就建立app.config.transform,並加入Package中的Content下,加入的方法有:
--NuGet.exe (可參考NuGet系列-自動發佈)
--NuGet Package Explorer (可參考NuGet系列-使用NuGet Package Explorer建立nupkg檔)

如果組件可以用在Web或Windows Form,可以同時準備web.config.transform、app.config.transform,這二個檔案,當安裝Package時,會比對目錄下(放在Content下相對於專案根目錄)有沒有扣除.transform檔名的檔案,如果有才做轉換,如果沒有不做轉換也不會在專案中增加檔案。

安裝與移除Package
有Config專案的Package在安裝上沒有不一樣,使用平常的安裝方法及可,但在移除上可能要注意,因為NuGet Config轉換除了安裝時會合供,移除時會刪除合併,不過只有跟轉換檔相同的element才會刪除,因為安裝後通常會改設定值,應該有些比對不成功,會刪不乾清。


上一篇
NuGet系列-安裝特定版本Package
下一篇
NuGet系列-程式碼轉換支援
系列文
發開相關7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言